package com.yupfeg.livedata

/**
 * LiveData的状态
 * * 状态流转 START -> WAIT_PRECESS(ERROR) -> PROCESSED
 * @author yuPFeG
 * @date 2021/04/17
 */
sealed class LiveDataState{

    companion object{
        /**
         * 初始化状态
         * */
        fun start() : LiveDataState = Start

        /**
         * 新赋值，等待订阅者消费处理
         * */
        fun waitProcess() : LiveDataState = WaitProcess

        /**
         * 数据异常状态
         * @param message 异常提示语
         */
        fun error(message: String) : LiveDataState = Error(message)

        /**
         * 数据已消费状态
         * */
        fun processed() : LiveDataState = Processed
    }

    /**
     * 初始化阶段
     * * 默认状态，用于提示外部订阅者执行初始化操作（如loading或者获取数据）
     * */
    object Start : LiveDataState()

    /**
     * 新赋值，等待订阅者消费处理
     * * 获取到新的数据，更新UI
     * */
    object WaitProcess : LiveDataState()

    /**
     * 数据异常状态
     * * 提示外部订阅者该数据出现错误，执行异常提示操作
     * @param message 数据异常的提示文本
     * */
    data class Error(val message : String) : LiveDataState()
    /**
     * 数据已消费状态
     * * 数据已被当前订阅者消费，无需再次处理
     * */
    object Processed : LiveDataState()

}